/**
 * 
 */
package com.proyecto.histoclin.modelo.servicios;

import java.util.List;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.contratos.modelo.dto.ContratosPortafolioservicios;
import com.proyecto.contratos.modelo.dto.ContratosTarifas;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.histoclin.modelo.dto.CorrelativosHistoclinId;
import com.proyecto.histoclin.modelo.dto.CupsHomologaciones;
import com.proyecto.histoclin.modelo.dto.HistoclinTratamientos;

/**
 * @author vico
 *
 */
public class ServicioTablaApoyoCupsHomologaciones extends ServicioGenerico {

	/**
	 * 
	 */
	ServicioCorrelativosHistoclin servicioCorrelativosHistoclin;
	public ServicioTablaApoyoCupsHomologaciones() {
		// TODO Auto-generated constructor stub
		
	}
	
		
	
	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub


		CupsHomologaciones objCupsHomologaciones = (CupsHomologaciones)pojo;

		if (isValidacionActiva()){
			validacion.incluir(objCupsHomologaciones);
		}
		
		
		try {
			
			String proxNumero = servicioCorrelativosHistoclin.obtenerProximoNumeroComoString(
					new CorrelativosHistoclinId (objCupsHomologaciones.getId().getCiaopr(), "CUPSHOMOLOGACION","cupshomologacod" ) ,true);

			objCupsHomologaciones.getId().setCupshomologacod( Integer.parseInt(proxNumero) );

	
			super.incluir(objCupsHomologaciones, iniciaTransaccion);

		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioHistoclinTratamientos::: " + e.getMessage());
			if("advertencia.HistoriasClinicas.datosBasicos.HistoclinTratamientos.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
		}
		
		
	}


	public List<CupsHomologaciones> obtenerListadoDeCupsHomologaciones(String ciaopr, Integer contratocod, String categoriaservi){
		
		String query = 
					"FROM CupsHomologaciones CH " +
						"WHERE " +
							"CH.categoriaservi = '" + categoriaservi  + "' AND " +
							"CH.cupscod in (" +
								"SELECT CPS.cupscod " +
								"FROM ContratosPortafolioservicios CPS " +
									"WHERE CPS.id.ciaopr = '" + ciaopr + "' AND " +
										"CPS.id.contratocod = " + contratocod +
								" ORDER BY CPS.cupscod ) " +
							"AND CH.id.cupshomologacod NOT IN (" +
								"SELECT CT.cupshomologacod " +
								"FROM ContratosTarifas CT " +
								"WHERE CT.id.ciaopr = '" + ciaopr + "' AND " +
									"CT.id.contratocod = " + contratocod	+")";
		
		System.out.println("obtenerListadoDeCupsHomologaciones.query" + query);
		
		List<CupsHomologaciones> lstCupsHomologaciones = propiedadDAO.ejecutarQueryConsulta(query) ;
		
		return lstCupsHomologaciones;
	}

	public ServicioCorrelativosHistoclin getServicioCorrelativosHistoclin() {
		return servicioCorrelativosHistoclin;
	}
	public void setServicioCorrelativosHistoclin(
			ServicioCorrelativosHistoclin servicioCorrelativosHistoclin) {
		this.servicioCorrelativosHistoclin = servicioCorrelativosHistoclin;
	}

}
